package deepr.lib;


import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;

public final class BeanMapConvert {

  /**
   * 对象转Map
   *
   * @param object
   * @return
   * @throws IllegalAccessException
   */
  public static Map<String, Object> beanToMap(Object object) throws IllegalAccessException {
    Map<String, Object> map = new HashMap<>();
    Field[] fields = object.getClass().getDeclaredFields();
    for (Field field : fields) {
      field.setAccessible(true);
      map.put(field.getName(), field.get(object));
    }
    return map;
  }

  /**
   * map转对象
   *
   * @param map
   * @param beanClass
   * @param <T>
   * @return
   * @throws Exception
   */
  public static <T> T mapToBean(Map<String, Object> map, Class<T> beanClass) throws Exception {
    T object = beanClass.newInstance();
    Field[] fields = object.getClass().getDeclaredFields();
    for (Field field : fields) {
      int mod = field.getModifiers();
      if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
        continue;
      }
      field.setAccessible(true);
      if (map.containsKey(field.getName())) {
        field.set(object, map.get(field.getName()));
      }
    }
    return object;
  }
}